﻿using zijian666.Data.SqlBuilders;

namespace zijian666.Data.SqlElements;

/// <summary>
/// 提供扩展方法以处理 SQL 元素。
/// </summary>
public static class SqlElementExtensions
{
    /// <summary>
    /// 将 SQL 元素追加到 <see cref="FormattableSql"/> 实例中。
    /// </summary>
    /// <typeparam name="T">SQL 元素类型。</typeparam>
    /// <param name="sql">要追加到的 <see cref="FormattableSql"/> 实例。</param>
    /// <param name="element">要追加的 SQL 元素。</param>
    /// <returns>追加后的 <see cref="FormattableSql"/> 实例。</returns>
    public static FormattableSql AppendSqlElement<T>(this FormattableSql sql, T element)
        where T : ISqlElement
    {
        element.Append(sql);
        return sql;
    }

    /// <summary>
    /// 将 <see cref="ISqlElement"/> 转换为 <see cref="FormattableSql"/>。
    /// </summary>
    /// <param name="element">要转换的 SQL 元素。</param>
    /// <returns>转换后的 <see cref="FormattableSql"/> 实例，如果元素为 null，则返回 null。</returns>
    public static FormattableSql? ToSql(this ISqlElement? element)
    {
        if (element is null)
        {
            return null;
        }
        var sql = new FormattableSql();
        return element.Append(sql) ? sql : null;
    }
}
